// 内置加密库
const crypto = require("crypto");
// 处理hash
const bcrypt = require("bcrypt");
const base64url = require("base64url");

// 使用 scrypt 对密码进行加密生成一个哈希值
function scryptHash(password) {
  const keyLen = 10;
  const salt = Buffer.from([12, 32, 4, 6, 66, 22, 222, 11]);

  const hashPwd = crypto.scryptSync(Buffer.from(password), salt, keyLen);

  console.log(base64url.encode(hashPwd));
  return base64url.encode(hashPwd);
}

// 使用 scrypt 对比明文密码和数据库中哈希值
function scryptCheck(password, hash) {
  return scryptHash(password) === hash;
}

// 使用 bcrypt 对密码进行加密生成一个哈希值
function bcryptHash(password) {
  const saltRounds = 10;
  const hash = bcrypt.hashSync(password, saltRounds);
  return hash;
}

// 使用 bcrypt 对比明文密码和数据库中哈希值
function bcryptCheck(password, hash) {
  return bcrypt.compareSync(password, hash);
}

// MD5 加密
function md5(str) {
  const hash = crypto.createHash("md5").update(str).digest("hex");
  return hash;
}

// 生成6验证码
function validateCode() {
  // 生成一个六位数的随机整数
  const randomInt = Math.floor(Math.random() * 1000000);
  // 将随机整数格式化为六位数的字符串，取前六位。不足补零。并返回
  return randomInt.toString().padStart(6, "0");
}

// TODO: UUID
function uuid() {
  return "";
}

module.exports = {
  scryptHash,
  scryptCheck,
  bcryptHash,
  bcryptCheck,
  md5,
  validateCode,
  uuid,
};
